class Solution {
public:
    int maxConsecutiveAnswers(string answerKey, int k) {
        // 求 answerKey 的一个最长子串，至多包含 k 个 T 或者至多包含 k 个 F
        int cf = 0, ct = 0;     // 分别统计字符 T 和字符 C在窗口内的个数
        int left = 0, right = 0, n = answerKey.size();
        int ans = 0;
        while(right < n)
        {            
            cf += answerKey[right] == 'F';
            ct += answerKey[right] == 'T';
            // 加入右边界指向的字符，同时右边界右移，即滑动窗口范围为[left, right]
            while(cf > k && ct > k)     // 如果 'T' 和 'F' 都大于 k，则窗口左端点右移
            {
                cf -= answerKey[left] == 'F';
                ct -= answerKey[left] == 'T';
                left++;
            }
            // 更新结果
            ans = max(ans, right - left + 1);
            right++;
        }
        return ans;
    }
};